#pragma once

#include <esp_netif.h>
#include <mcus/phy62xx/std_type.h>

#ifdef __cplusplus
extern "C" {
#endif


/// 字符串型 IPv4 配置
typedef struct {
	char ip[IP4ADDR_STRLEN_MAX];
	char netmask[IP4ADDR_STRLEN_MAX];
	char gateway[IP4ADDR_STRLEN_MAX];
} Ip4InfoStr;

/**
 * 由字节生成32位 IPv4 地址
 */
#define ip4_bytes_to_u32(b1, b2, b3, b4) ((uint32_t)((b1)<<24 | (b2)<<16 | (b3)<<8 | (b4)))
#define ip4_array_to_u32(arr) ((uint32_t)(((arr)[0])<<24 | ((arr)[1])<<16 | ((arr)[2])<<8 | (arr)[3]))

/**
 * @brief IP地址格式转换: uint32_t -> string
 */
char* ip4_u32_to_str(uint32_t ip, char *buf);

/**
 * @brief IPv4 配置信息格式转换，字符串 -> 结构
 */
void ip4_info_str_to_struct(Ip4InfoStr* info, esp_netif_ip_info_t* st);

/**
 * @brief IPv4 配置信息格式转换，结构 -> 字符串
 */
void ip4_info_struct_to_str(esp_netif_ip_info_t* st, Ip4InfoStr* info);

/**
 * @brief 打印网络接口信息
 */
void tcpip_if_dump_info(esp_netif_t* tcpip_if);

/**
 * 获取 socket ipv4 地址
 */
//sockaddr_in ip4_getlocal(int skt);
//sockaddr_in ip4_getpeer(int skt);


#ifdef __cplusplus
}
#endif
